package com.ggste.dovesibeveoggi;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.util.Log;

public class ParseOfferte {
	
	public static final String TAG = "ParseOfferte ";
	
    static void vDebug(String debugString){         //metodi di convenienza
    	System.out.println(TAG + "DomParsing" + debugString+"\n");
    }
    static void eDebug(String debugString){
            Log.e("DomParsing", debugString+"\n");
    }
   
    ArrayList<Offerta> parsedData=new ArrayList<Offerta>(); //struttura dati che immagazzinerà i dati letti
    public ArrayList<Offerta> getParsedData() {  //metodo di accesso alla struttura dati
            return parsedData;
    }

    public String get_word_from_ID(int myID, String lang) {  //metodo di accesso alla struttura dati
    	String word_from_ID="";
    	//-------------------------------------------------------------------------------------------------------

    	//-------------------------------------------------------------------------------------------------------
        return word_from_ID;
    }
    
    public void parseXml(InputStream xmlDoc){
    //public void parseXml(String xmlUrl){
           
    	Document doc;
        try {
        	                               
        	//doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new URL(xmlUrl).openStream());
        	doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlDoc);
            
        	//Costruiamo documento delle offerte a partire dallo stream dati fornito dall'URL        
            Element root=doc.getDocumentElement();
            //Elemento(nodo) radice del documento
                   
            vDebug("Root element :" + root.getNodeName());
            vDebug("");
                   
            //NodeList notes=root.getElementsByTagName("esempio"); //potremmo direttamente prendere gli elementi 
            
            NodeList notes=root.getChildNodes();
            //ma prediamo tutti i "figli" diretti di root. Utile se non avessimo solo "Milano" come figli di root
                   
            for(int i=0;i<notes.getLength();i++){//per ogni
            	Node c= notes.item(i); //nodo
                           
	        	if(c.getNodeType()==Node.ELEMENT_NODE){		//controlliamo se questo è un nodo elemento (un tag)
	            	// se avessimo usato root.getElementsByTagName("note") questo controllo
	                // non sarebbe stato necessario
	                           
	                Offerta nuovaOfferta=new Offerta(); //costruiamo un oggetto Offerta dove andremo a salvare i dati
	                           
	                Element note=(Element)c; //cast da nodo a Elemento
	                           
	                //non controlliamo if(note.getNodeName().equals("note"))  in quanto sappiamo di avere solo "note" come childs
	                           
	                String id=note.getAttribute("id"); // lettura attributo
	                vDebug("_Attributo note id: "+id);
	                vDebug("");
	                           
	                nuovaOfferta.set_Id(id); // settiamo l'id del nostro oggetto Offerta
	                           
	                NodeList noteDetails=c.getChildNodes();  //per ogni nota abbiamo i vari dettagli
	                for(int j=0;j<noteDetails.getLength();j++){
	                	Node c1=noteDetails.item(j);
	                                   
                    	if(c1.getNodeType()==Node.ELEMENT_NODE){ //anche in questo caso controlliamo se si tratta di tag
                    		Element detail=(Element)c1; //cast
                            String nodeName=detail.getNodeName(); //leggo il nome del tag
                            String nodeValue=detail.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                            vDebug("______Dettaglio: <"+nodeName+">");
                            vDebug("______Contenuto Dettaglio: <"+nodeValue+">");
                            vDebug("");
                                                   
                            //In base al nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                            if(nodeName.equals("nome"))
                            	nuovaOfferta.set_nome(nodeValue);
                                                   
                            if(nodeName.equals("offerta"))
                                nuovaOfferta.set_offerta(nodeValue);
                                                   
                            if(nodeName.equals("indirizzo"))
                                nuovaOfferta.set_indirizzo(nodeValue);
                            /*                     
                            if(nodeName.equals("es"))
                                nuovaOfferta.set_es(nodeValue);
                                                    
                            if(nodeName.equals("img"))
                                nuovaOfferta.set_img(nodeValue);
                            */
                        }
	                }
	                vDebug("");
	                   
	                parsedData.add(nuovaOfferta); //aggiungiamo il nostro oggetto all'arraylist
	        	}
	        }
        //gestione eccezioni
        } catch (SAXException e) {
        	eDebug(e.toString());
        } catch (IOException e) {
        	eDebug(e.toString());
        } catch (ParserConfigurationException e) {
        	eDebug(e.toString());
        } catch (FactoryConfigurationError e) {
        	eDebug(e.toString());
        }
           
    }
    
    public String get_offertaDelGiorno(InputStream xmlDoc,String day, String lang){
        //public void parseXml(String xmlUrl){
    	System.out.println(TAG + " [get_offertaDelGiorno]");
    	String word_from_ID="";
    	Document doc;
    	
    	Element animaleSorteggiato;
    	Element localeTrovato;
    	
    	String parolaInLingua=null;
        try {
        	Offerta nuovoAnimale=new Offerta();
        	//doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new URL(xmlUrl).openStream());
        	doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlDoc);
            //Costruiamo il nostro documento a partire dallo stream dati fornito dall'URL
        	System.out.println(TAG + "UNO: [get_offertaDelGiorno]->wordID=<"+ day +">");
        	
//        	animaleSorteggiato=doc.getElementById( day );
        	localeTrovato=doc.getElementById( day );
            //Elemento(nodo) sorteggiato del documento
            
            //vDebug("Parola tradotta: " + animaleSorteggiato.getNodeName());
        	vDebug("Parola tradotta: " + localeTrovato.toString());
            vDebug("");
            System.out.println("");       
            //System.out.println("PAROLA SORTEGGIATA: "+animaleSorteggiato.getAttribute(lang));
            System.out.println("PAROLA SORTEGGIATA: "+ localeTrovato.toString());
            //NodeList notes=root.getElementsByTagName("note"); //potremmo direttamente prendere gli elementi note
            
            //NodeList animale=animaleSorteggiato.getChildNodes();
            //NodeList animale=(NodeList) localeTrovato.item(0);
            NodeList animale=localeTrovato.getChildNodes();
            //ma prediamo tutti i "figli" diretti di root. Utile se non avessimo solo "note" come figli di root
             
            for(int j=0;j<animale.getLength();j++){
            	Node c1=animale.item(j);
            	if(c1.getNodeType()==Node.ELEMENT_NODE){ //anche in questo caso controlliamo se si tratta di tag
            		Element detail=(Element)c1; //cast
                    String nodeName=detail.getNodeName(); //leggo il nome del tag
                    String nodeValue=detail.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                    vDebug("______Animale: <"+nodeName+">");
                    vDebug("______Contenuto Offerta: <"+nodeValue+">");
                    vDebug("");
                                           
                    //a dipendenza del nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                    if(nodeName.equals(lang)){
                    	parolaInLingua=nodeValue;
                    	System.out.println(TAG + "[get_offertaDelGiorno]->PAROLA = <"+nodeValue+">");
                    
                    }
                }
            }
            return parolaInLingua;
            //gestione eccezioni
            } catch (SAXException e) {
            	eDebug(e.toString());
            } catch (IOException e) {
            	eDebug(e.toString());
            } catch (ParserConfigurationException e) {
            	eDebug(e.toString());
            } catch (FactoryConfigurationError e) {
            	eDebug(e.toString());
            }
        	return null;
        	//return parolaSorteggiata.getAttribute(lang);
        }
}